package com.mes.cloud.dao;

import com.mes.cloud.api.dto.request.area.BaseAreaListRequest;
import com.mes.cloud.entity.BaseArea;
import com.mes.cloud.entity.param.BaseAreaByIds;
import com.mes.cloud.entity.vo.BaseEmployeePositionVo;
import com.mes.cloud.entity.vo.area.BaseAreaDetailVo;
import com.mes.cloud.entity.vo.area.BaseAreaLevelVo;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.ids.SelectByIdsMapper;

import java.util.List;
import java.util.Map;

/**
 * 行政区划表
 *
 * @author Mr.zhang
 * @version 2019-07-29 18:14:59
 * @email 407892370@qq.com
 */
public interface BaseAreaDao extends SelectByIdsMapper<BaseArea>, Mapper<BaseArea> {

    List<BaseArea> list(Map<String, Object> params);

    List<BaseArea> areaPageSearch(Map<String, Object> params);

    List<BaseAreaLevelVo> listLevel(@Param("level") Integer level);

    List<BaseEmployeePositionVo> selectEmployeeListByArea(Map<String, Object> params);

    String selectAreaNameByAreaId(@Param("areaId") String areaId);

    BaseAreaDetailVo selectAreaDetail(Map<String, Object> params);

    Integer selectEnableCount(Map<String, Object> params);

    /**
     * <查询组织区划信息>
     *
     * @param params
     * @return BaseArea
     * @author xy
     * @date 2019/8/3 10:26
     */
    List<BaseArea> selectSysOrganizationArea(Map<String, Object> params);

    /**
     * <通过组织查询区域数据>
     * @author xy
     * @date 2019/8/30 11:17
     * @param  organizationId
     * @return List<BaseArea>
     */
    List<BaseAreaLevelVo> areaListByOrganizationId(String organizationId);

    /**
     * @description 根据parent_group 拼接行政区划全名
     * @author dongyi
     * @date 2019-09-17 16:12
     **/
    String getAreaFullName(@Param("parentGroup") String parentGroup);

    /**
     * 排除查询
     * @param baseAreaListRequest
     * @return List<BaseArea>
     */
    List<BaseArea> excludeQueryAreaList(BaseAreaListRequest baseAreaListRequest);

    /**
     * @description 根据员工查询授权组织的所有行政区划对应的parent_group，
     * 可以把上级查询出来，维持整个树的结构
     * @author dongyi
     * @date 2019-11-05 11:32
     **/
    List<BaseArea> getAreaByEmployee(@Param("employeeId") String employeeId);

    /**
     * @description 根据多个ID查询行政区划列表
     * @author dongyi
     * @date 2019-11-05 13:16
     **/
    List<BaseArea> listByIds(BaseAreaByIds baseAreaByIds);

    /**
     * @description 查询当前员工数据权限下的行政区划的所有下级，只到组织关联的行政区划表的级别，即区县级别
     * @author dongyi
     * @date 2019-11-05 11:32
     **/
    List<BaseArea> getSonAreaByEmployee(@Param("employeeId") String employeeId, @Param("areaId") String areaId);

    /**
     * @description 查询当前员工数据权限下的行政区划的所有下级,到最后一级，即村级别
     * @author dongyi
     * @date 2019-11-05 11:32
     **/
    List<BaseArea> getAllSonAreaByEmployee(BaseAreaByIds baseAreaByIds);

    List<BaseArea> getAllSonAreaSpecial(BaseAreaByIds baseAreaByIds);

    /**
     * @Author ysd
     * @Description 同步员工查询
     * @Date 14:43 2019/11/17
     **/
    List<BaseArea> findListBySynchro(@Param("areaNames") List<String> areaNames);
}
